معرفی زبان های توصیف سخت افزار
نوشته شده به وسیله ی محمد ک در تاریخ 89/1/31:: 10:14 عصر
معرفی زبان های توصیف سخت افزار
زبانهای توصیف سختافزار یکی از مهمترین ابزارهای مدرن طراحی سختافزارها میباشد که کاربرد آنها در صنعت رو به افزایش است به طوری که امروزه عضو جدا نشدنی فرایند طراحی تا پیاده سازی سختافزارهای مدرن به شمار میروند. با توجه به اینکه زبانهای توصیف سختافزار یکی از مهمترین ابزارهای توسعه جنبش سختافزار آزاد به شمار میروند، در این مقاله به طور مفصل آنها را معرفی و مقایسه کردهایم، در پایان نیز تعدادی خودآموز و مرجع قابل دانلود جهت فراگیری این زبانها در اختیار بازدیدکنندگان قرار گرفته است.
تکامل طراحی دیجیتال به کمک کامپیوتر
طراحی مدارات دیجیتال از 25 سال گذشته تا کنون بسیار متحول گشته است، مدارهای دیجیتال ابتدایی که به سختی میتوان نام سختافزار را بر روی آنها گذاشت، با لامپهای خلا و تعداد اندکی ترانزیستور ساخته میشدند.
با ظهور تکنولوژی مدار مجتمع، امکان پیادهسازی مدارات دیجیتال بر روی یک تراشه فراهم گردید. اولین نسل مداراتمجتع یا IC ها، SSI سر نام Small Scale Integration نام دارد که در این نسل تراشهها با تعداد بسیار اندکی ترانزیستور و گیتهای منطقی ساخته میشدند، پس از آن حجم مجتمع سازی در نسلهای MSI سر نام Medium Scale Integration و LSI سر نام Large Scale Integration به سرعت گسترش یافت و به طوری که امکان مجتمع سازی هزاران گیت منطقی، در داخل یک تراشه برای طراحان سختافزار فراهم آمده بود.
در این مرحله روند طراحی بسیار پیچیده و دشوار گردیده بود و طراحان نیاز داشتند تا بخشی از مراحل طراحی را به کامپیوتر بسپارند. به کمک ابزارهای طراحی دیجتال کامپیوتری یا CAD Toolها طراحان توانستند کامپیوتر را در فرایند طراحی اجزای خود سهیم سازند.
نمایی از یک طراحی بسیار پیچیده
با پیشرفت نسل VLSI سر نام Very Large Scale Integration امکان طراحی مدارات مجتمع با میلیونها ترانزیستور فراهم گشته است(مانند تصویر بالا). به دلیل پیچیدگی بسیار زیاد این مدارات ،طراحی و ارزیابی عملکرد آنها به روشهای سنتی دیگر میسر نیست، به همین خاطر ایدهای جهت توصیف طرح به یک زبان قابل فهم برای کامپیوتر مطرح گردید تا زمینه حضور کامپیوتر در پروسه طراحی یک مدار VLSI گستردهتر گشته و مسائل طراحی و ارزیابی در پروسه طراحی یک سختافزار جدید، با الگوریتمهای از پیش تعریف شده، پردازش شوند.
زبان توصیف سختافزار چیست ؟
HDL سر نام Hardware Deion Language ، به خانوادهای از زبانهای برنامهنویسی گفته میشود که جهت مدلسازی عملکرد بخشی از یک سختافزار به کار گرفته میشوند. توصیف سختافزار به کمک HDLها به دو شکل کلی امکان پذیر است:
روش اول: مدلسازی ساختاری سختافزار، که با تشرح ارتباطات خارجی، اجزای تشکیل دهنده داخلی و اتصالات میانها، جهت توصیف ساختار و اجزای تشکیل دهنده یک سختافزار به کار برده میشود.
روش دوم: مدلسازی رفتاری سختافزار، جهت توصیف انتزاعی رفتار یک سختافزار بدون در نظر گرفتن جزئیات ساختار آن میباشد که بدون لحاظ کردن اجزای تشکیل دهنده، به توصیف خروجیهای مدل بر اساس تابعی از ورودیهای آن میپردازد. مدلسازی رفتاری یک سختافزار در سطوح مختلفی از انتزاع صورت میپذیرد که سطوح بالاتر رفتار سختافزار را به صورت چکیدهتر با جزئیات کمتری نسبت به سطوح پایین تر انتزاع، توصیف میکنند.
طراحی یک سختافزار بر اساس طرح شماتیک مداری که در گذشته از آن به وفور استفاده میشد، با اینکه شامل اطلاعات بسیار کاملی در مورد سختافزار و اجزای تشکیل دهنده آن بود، اما در توصیف طرحهای بزرگ به خاطر حجم بسیار زیاد اجزای تشکیل دهنده طرح بسیار پیچیده گشته و حجم مستندات آن خارج از کنترل میگشت. همچنین در روش سنتی طراحی از ایدههای مطرح شده در طرح هیچ گونه حفاظتی به عمل نمیآمد و امکان سواستفاده از آنها توسط اشخاصی که طرح به آنها فروخته میشود، وجود داشت.
نمایی از یک سختافزار مدرن، طراحی شده به کمک زبانهای توصیف سختافزار
در طراحی یک سختافزار با توصیف متنی آن به کمک یک زبان برنامهنویسی، هم حجم مستندات طرح کاهش یافته و هم امکان حفاظت ایدههای طرح به وجود آمده است. علاوه بر این توصیف متنی یک سختافزار به کمک HDLها برای کامپیوتر قابل فهمتر از طرح شماتیکی آن سختافزار با اطلاعات تصویری میباشد.
مهمترین وجه تمایز یک زبان توصیف سختافزار با یک زبان برنامهنویسی متداول مانند C ، در نحوه اجرای خطکدها میباشد، در زبانهای برنامه نویسی متداول مانند C خط کدهای نوشته شده به ترتیب از بالا به پایین اجرا شده تا در نهایت به اتمام برسند، در حالی که در زبانهای توصیف سختافزار اجرای دستورات ماهیت ترتیبی و سریال نداشته و تمام خطکدها به صورت موازی و همزمان اجرا میشوند، در واقع برای توصیف سختافزاری که ممکن است از چندین بخش ساخته شده باشد که خروجی آنها به صورت همزمان تغییر میکند، زبانهای برنامهنویسی متداول با ماهیت اجرای ترتیبی خود کاربردی ندارند.
شبیه سازی سختافزار به کمک HDLها
به کمک زبانهای توصیف سختافزار علاوه بر طراحی میتوانیم یک سختافزار را شبیه سازی کرده تا قابلیتها و عملکرد آن را قبل از پیادهسازی آزمایش کنیم. در دنیای واقعی تست کردن یک سختافزار، خود نیازمند یک سختافزار دیگر است که مجموعهای از ورودیهای مجاز را برای سختافزار زیر تست تولید کرده و خروجی حاصله را با مقدار مورد انتظار مقایسه کند. در فضای مجازی که کامپیوتر در اختیار ما قرار داده است نیز میتوانیم قبل از پیاده سازی و ساختن سختافزار، عملکرد آنرا با طراحی یک سختافزار جانبی جهت تست، سختافزار اصلی را ارزیابی کنیم، به این ترتیب که به کمک زبان توصیف سختافزار، برنامهای نوشته میشود تا زنجیرهای از ورودیها را به سختافزار مورد آزمایش داده و خروجی آن را با مقادیر مورد انتظار طراح مقایسه نماید، به این برنامه که جهت آزمایش عملکرد سختافزار نوشته میشود، Testbench گفته میشود.
زبانهای توصیفسختافزار Verilog و VHDL در میان سایر HDLها محبوبیت بیشتری پیدا کردهاند که در ادامه مقاله به بررسی و مقایسهآنها خواهیم پرداخت.
زبان توصیف سختافزار VHDL
زبان VHDL سر نام Very High Speed Integrated Circuit Hardware Deion Language از جمله HDLهای پرطرفداری است که امروزه در طراحی تراشههای با کاربرد خاص و تراشه FPGA به کار گرفته میشود.
این زبان در ابتدا به سفارش وزارت دفاع آمریکا جهت مستندسازی اطلاعات مدارات دیجیتال و تراشههای به کار گرفته شده در ادوات نظامی، طراحی شد. اطلاعات بسیار زیاد و پیچیده مدارات دیجیتال به کار گرفته شده در ادوات نظامی، مانع از توسعه سریع آنها میشد و اطلاعات طراحی را فقط برای طراح قابل خواندن و پیگیری میساخت به طوری که توسعه همان طرح توسط شخصدیگر دشوار بود، به همین خاطر در سال 1980 زبانی طراحی شد که توصیف یک مدار در سطوح مختلف انتزاع در آن میسر باشد. پس از آن ابزارهایی جهت شبیهسازی مدارات طراحی شده با این زبان ایجاد شد، سپس ابزارهای کامپیوتری جهت سنتز کردن کدهای VHDL عرضه شدند که به کمک این ابزار، توصیف سختافزاری یک مدار را میتوان به راحتی به معادل فیزیکی آن جهت پیاده سازی و ساخت مرتبط کرد.
در طراحی زبان توصیف سختافزاری VHDL از مفاهیم زبان برنامهنویسی Ada بهره برده شده به همین خاطر این زبان در syntax بسیار مشابه Ada میباشد. این زبان به گونهای طراحی شده که مسائل همزمانی و موازیسازی سختافزار را به خوبی پوشش دهد.
در سال 1983 دوشرکت بزرگ IBM و Texas Instrument به همراه شرکت Intermetrics قراردادی را جهت توسعه این زبان برای کاربردهای طراحی مدارات دیجیتال امضا کردند و چهار سال بعد این زبان به توسط IEEE استاندارد سازی شد پس از آن وزارت دفاع آمریکا شرکتهای تابع خود را مقید ساخت تا تمامی مدارات دیجیتال خود را به این زبان توصیف کنند.
جگنده F-22 یکی از اولین پروژههایی بود که تمامی مدارات و مستندات الکترونیکی آن به زبان VHDL نگاشته شده بود، موفقیت این پروژه موجب شد تا زبان VHDL بیش از پیش توسعه یافته و مورد استفاده قرار گیرد.
در سال 1993 استاندارد IEEE-1076 ویرایش شد و در آن تمهیداتی جهت پوشش دادن به سیگنالهایی که در آن واحد چند مقدار به آنها داده میشود، اندیشیده شد. در سال 1996 ابزارهای شبیه سازی و سنتز مدارات دیجیتال توصیف شده توسط VHDL به صورت تجاری عرضه شدند تا مراحل طراحی تا پیادهسازی کامپیوتری یک سختافزار به کمک VHDL تکمیل شود.
در سال 2006 کمیته فنی VHDL مستقر در کنسرسیوم Accellera که توسط IEEE جهت به روزرسانی استاندارد VHDL ایجاد شده است، نسخه سوم از پیش نویس استاندارد VHDL-2006 را ارائه کرد.
یک نمونه از برنامه VHDL که به توصیف یک گیت AND ساده بدون ملاحظات زمانی پرداخته است در زیر آورده شده است :
-- import std_logic from the IEEE library
library IEEE;
use IEEE.std_logic_1164.all;
-- this is the entity
entity name_of_entity is
port (
IN1 : in std_logic;
IN2 : in std_logic;
OUT1: out std_logic);
end entity name_of_entity;
-- here comes the architecture
architecture name_of_architecture of name_of_entity is
-- Internal signals and components would be defined here
begin
OUT1 <= IN1 and IN2;
end architecture name_of_architecture;
زبان توصیف سختافزار Verilog
زبان توصیف سختافزاری Verilog سرنام Verifying Logic جهت مدلسازی سیستمهای الکترونیکی ابداع شده است که کلیه مراحل طراحی، ارزیابی و پیاده سازی یک مدار آنالوگ یا دیجیتال یا یک مدار ترکیبی را در چند سطح انتزاع پوشش میدهد.
Syntax این زبان بسیار مشابه به زبان C میباشد و در توسعه آن از ویژگیهای زبان C الگو گرفته شده است. این زبان در سال 1981 توسط Phil Moorby در شرکت Gateway Design Automation ابداع شد و در سال 1985 نرمافزار شبیهساز این زبان به نام Verilog-XL عرضه شد در سال 1989 این شرکت به همراه حقوق معنوی این زبان توسط شرکت Cadance خریداری و سپس مستندات آنرا برای استفاده عمومی، به صورت رایگان در اختیار مردم قرار گرفت.
در سال 1993 این زبان توسط IEEE بازنگری و استانداردسازی شد در همین سال بر اساس آمار EE Times حدود 85 درصد از طراحیهای مدارات مجتمعی که به کارخانههای تولیدکننده ادوات نیمههادی سفارش داده شدند، به زبان Verilog توصیف شده بودند.
یک نمونه از برنامه Verilog که به توصیف یک فلیپفلاپ پرداخته است در زیر آورده شده است :
module toplevel(clock,reset);
input clock;
input reset;
reg flop1;
reg flop2;
always @ (posedge reset or posedge clock)
if (reset)
begin
flop1 <= 0;
flop2 <= 1;
end
else
begin
flop1 <= flop2;
flop2 <= flop1;
end
endmodule
از جمله امکانات زبان Verilog محیط PLI آن سر نام Program Language Interface میباشد که به کمک آن میتوان کنترل برنامه را از زبان Verilog بر عهده تابعی که به زبان C نوشته شده است قرار داد، این قابلیت موجب شده تا زبان Verilog انعطاف پذیر گشته و توسعه برنامه در آن توسط زبان C نیز امکان پذیر باشد.
توصیف ساختاری یک سختافزار با زبان Verilog هیچ گونه برتری یا کاستی نسبت به توصیف آن با زبان VHDL ندارد و تفاوت میان این دو زبان بیشتر در توصیفهای رفتاری یک سختافزار خود را نشان میدهند. شکل زیر نشاندهنده میزان مقیاس پذیری این دو زبان در سطوح مختلف انتزاع در توصیف رفتاری میباشد:
همانطور که مشاهده میکنید، زبان Verilog توانایی مدلسازی سختافزار تا پایینترین سطح انتزاع یعنی سطح ترانزیستور و سوییچ را دارا میباشد در حالی که زبان VHDL توانایی مدلسازی سختافزار در بالاترین سطوح انتزاع (تا سطح سیستم) را دارد. علارقم اینکه به کمک قابلیت PLI زبان Verilog تا حدودی میتوان به توصیف سیستمی یک سختافزار پرداخت، اما اصولا بهرهگیری از HDL ها جهت توصیف یک سیستم ناکارآمد است و برای این منظور زبانهای کارآمد دیگری مانند SystemC و System Verilog طراحی شده که به کمک آنها میتوان سختافزار را از بالاترین سطح انتزاع توصیف نمود. لذا قابلیتهای توصیف سیستمی VHDL را به سختی میتوان در زمره برتریهای آن نسبت به Verilog قلمداد کرد.
انواع داده در زبان Verilog نسبت به VHDL ساده تر و استفاده از آنها آسانتر میباشد، ضمن اینکه این انواع داده در Verilog به مدلسازی ساختاری نزدیکتر هستند، در این زبان برخلاف VHDL انواع داده مشخصی تعریف شده است و کاربر نمیتواند انواع داده جدید به آن اضافه کند. به دلیل سادگی استفاده از انواع دادهها زبان Verilog نسبت به VHDL ارجحیت دارد.
برای فردی که پیشزمینهای در مورد زبانهای برنامه نویسی ندارد، یادگیری زبان Verilogسادهتر از VHDL است، چرا که نوشتن کدهای VHDL کمی پیچیده تر از Verilogمیباشد و برای تسلط بر خط کد این VHDL، زمان بیشتری نیاز است، علاوه بر اینکه در زبان VHDL روشهای متعددی برای مدل کردن یک مدار وجود دارد که در ساختارهای بزرگ میتواند موجب سردرگمی افراد تازه کار شود.
انتخاب یک زبان توصیف سختافزار
برای انتخاب یک زبان جهت توصیف مدار دیجیتال، عوامل متعددی را باید علاوه بر برتریهای ذاتی یک زبان خاص مدنظر قرار داد. برخی از این عوامل عبارتند از:
سلیقه شخصی : اصولا چون اکثر مهندسین و طراحان مدارات دیجیتال به زبان C مسلط هستند، زبان Verilog را که خط کد مشابه C دارند ترجیح میدهند، ضمن اینکه خوانایی کدهای این زبان بهتر از VHDL است.
موجودیت ابزارهای شبیهسازی و سنتز : در حال حاضر ابزارهای شبیهساز رایگان متعددی برای زبان Verilog وجود دارند که از میانآنها میتوان به کامپایلر Icarus Verilog اشاره کرد، در حالی که ابزارهای شبیهساز متنباز اندکی برای VHDL موجود هستند و اقلب ابزارهای شبیهسازی این زبان، به صورت تجاری به فروش میرسند.
عوامل تجاری و بازاریابی : بر اساس آمارهای منتشر شده در سال 1998بازار ابزارهای شبیهسازی زبان Verilog حدود 150 میلیون دلار اعتبار داشت به طوری که اعتبار این بازار نسبت به سال 1994 دو برابر شده بود، در سال 2003 نیز شرکت Synopses یکی از بزرگترین شرکتهای این بازار چند صد میلیون دلاری، اعلام کرد که تیم توسعه و تحقیقات این شرکت تنها بر روی Verilog متمرکز شده اند و در ابزارهای شبیهسازی این شرکت از VHDLپشتیبانی نخواهد شد.
زبان توصیف سختافزاری Verilog مورد استقبال صنایع بزرگ قرار گرفته است به طوری که امروزه این زبان به عنوان یک زبان پرکاربرد در صنعت طراحی و تولید مدارات دیجیتال شناخته شده است. در مقابل زبان VHDL از سوی جامعه آکادمیک مورد استقبال قرار گرفته و بیشتر در پروژههای دانشگاهی از آن بهره گرفته میشود.
نویسنده: علیرضا حقدوست (سایت سختافزار ایران)
کلمات کلیدی : سختافزار، زبان توسیف سختافزار، HDL، VHDL، Verilog